/*
 * NodoContexto.cpp
 *
 *  Created on: 29/04/2012
 *      Author: lucas
 */

#include "../hdr/NodoContexto.h"
#include <stdio.h>

NodoContexto::NodoContexto() {
	contextoCompleto[0] = 0;
}

NodoContexto::NodoContexto(unsigned char* contextoCompleto) {
	for (int i = 0;; i++) {
		this->contextoCompleto[i] = contextoCompleto[i];
		if (contextoCompleto[i] == 0)
			break;
	}
}

// Para el nodo de contexto X, devuelve el nodo de contexto (caracter + X)
NodoContexto* NodoContexto::getNodoContextoSuperior(unsigned char caracter) {
	for (unsigned int i = 0; i < contextosOrdenSuperior.getLargo(); i++) {
		if (contextosOrdenSuperior[i] == caracter) {
			printf("Encontró contexto: %c%s\n", caracter, contextoCompleto); // Debug
			return nodosOrdenSuperior[i];
		}
	}
	// No existe el nodo: lo creamos
	unsigned char aux[16]; // Variable debug
	aux[0] = caracter;
	for (int i = 0;; i++) {
		aux[i + 1] = contextoCompleto[i];
		if (contextoCompleto[i] == 0)
			break;
	}
	NodoContexto* nuevoNodo = new NodoContexto(aux);
	contextosOrdenSuperior.append(caracter);
	nodosOrdenSuperior.append(nuevoNodo);
	// Debug
	printf("Crea nuevo contexto: %s\n", aux);
	return nuevoNodo;
}

NodoContexto::~NodoContexto() {
	for (unsigned int i = 0; i < nodosOrdenSuperior.getLargo(); i++) {
		delete nodosOrdenSuperior[i];
	}
}

